package LeetCode;

//给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。
//
//不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
public class Num26 {
    public int removeDuplicates(int[] nums) {
        //变量法
//        int n = nums.length;
//        int i = 0;
//        while (i < n - 1) {
//            if (nums[i] == nums[i + 1]) {
//                for (int j = i + 1; j < n - 1; j++) {
//                    nums[j] = nums[j + 1];
//                }
//                nums[n-1]=0;
//                n--;
//            } else {
//                i++;
//            }
//        }
//        return n;
        //快慢指针法
        int n = nums.length;
        if (n == 0) {
            return 0;
        }
        //fast用来遍历数组，low用来控制不重复元素
        int fast = 1, low = 1;
        while (fast<n){
            //当第一个fast与low不同时将fast赋值给low
            if (nums[fast]!=nums[fast-1]){
                nums[low]=nums[fast];
                //low前往下一位
                low++;
            }
            //不管是否重复fast都走向下一节点
            fast++;
        }
        return low;
    }
}
